home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / x68000.arc / SOURCE.ARC / INITOPER.MOD < prev    next >
Encoding:
Text File  |  1980-01-01  |  24.6 KB  |  1,058 lines

  1. MODULE InitOperationCodes;
  2. (* Module to construct the file containing the Operation Code Data Table *)
  3.  
  4.    FROM SYSTEM IMPORT
  5.       ADR, TSIZE;
  6.  
  7.    FROM FileSystem IMPORT
  8.       File, Response, Delete, Lookup, WriteNBytes, Close;
  9.  
  10.    FROM Terminal IMPORT
  11.       WriteString, WriteLn;
  12.  
  13.    FROM Parser IMPORT
  14.       TOKEN;
  15.  
  16.  
  17.    CONST
  18.       FIRST = 1;
  19.       LAST = 118;
  20.  
  21.    TYPE
  22.       ModeTypeA = (RegMem3,      (* 0 = Register, 1 = Memory *)
  23.                    Ry02,         (* Register Ry -- Bits 0-2 *)
  24.                    Rx911,        (* Register Rx -- Bits 9-11 *)
  25.                    Data911,      (* Immediate Data -- Bits 9-11 *)
  26.                    CntR911,      (* Count Register or Immediate Data *)
  27.                    Brnch,        (* Relative Branch *)
  28.                    DecBr,        (* Decrement and Branch *)
  29.                    Data03,       (* Used for VECT only *)
  30.                    Data07,       (* Branch & MOVEQ *)
  31.                    OpM68D,       (* Data *)
  32.                    OpM68A,       (* Address *)
  33.                    OpM68C,       (* Compare *)
  34.                    OpM68X,       (* XOR *)
  35.                    OpM68S,       (* Sign Extension *)
  36.                    OpM68R,       (* Register/Memory *)    
  37.                    OpM37);       (* Exchange Registers *)
  38.                    
  39.       ModeTypeB = (Bit811,       (* BIT operations - bits 8/11 as switch *)
  40.                    Size67,       (* 00 = Byte, 01 = Word, 10 = Long *)
  41.                    Size6,        (* 0 = Word, 1 = Long *)
  42.                    Size1213A,    (* 01 = Byte, 11 = Word, 10 = Long *)
  43.                    Size1213,     (*            11 = Word, 10 = Long *)
  44.                    Exten,        (* OpCode extension required *)
  45.                    EA05a,        (* Effective Address - ALL *)
  46.                    EA05b,        (* Less 1 *)
  47.                    EA05c,        (* Less 1, 11 *)
  48.                    EA05d,        (* Less 9, 10, 11 *)
  49.                    EA05e,        (* Less 1, 9, 10, 11 *)
  50.                    EA05f,        (* Less 0, 1, 3, 4, 11 *)
  51.                    EA05x,        (* Dual mode - OR/AND *)
  52.                    EA05y,        (* Dual mode - ADD/SUB *)
  53.                    EA05z,        (* Dual mode - MOVEM *)
  54.                    EA611);       (* Used only by MOVE *)
  55.                    
  56.       ModeA = SET OF ModeTypeA;
  57.       ModeB = SET OF ModeTypeB;
  58.  
  59.       TableRecord = RECORD
  60.                        Mnemonic : TOKEN;
  61.                        Op : BITSET;
  62.                        AddrModeA : ModeA;
  63.                        AddrModeB : ModeB;
  64.                     END;
  65.  
  66.  
  67.    VAR
  68.       Table68K : ARRAY [FIRST..LAST] OF TableRecord;
  69.       i : CARDINAL;   (* index variable for initializing Table68K *)
  70.       d : CARDINAL;   (* dummy for count on WriteNBytes *)
  71.       f : File;   (* "OPCODE.DAT" *)
  72.  
  73.  
  74. PROCEDURE One;   
  75. BEGIN                                   
  76.    i := 1;
  77.    WITH Table68K[i] DO
  78.       Mnemonic := "ABCD";
  79.       Op := {15, 14, 8};
  80.       AddrModeA := ModeA{Rx911, RegMem3, Ry02};
  81.       AddrModeB := ModeB{};
  82.    END;
  83.  
  84.    INC (i);
  85.    WITH Table68K[i] DO
  86.       Mnemonic := "ADD";
  87.       Op := {15, 14, 12};
  88.       AddrModeA := ModeA{OpM68D};
  89.       AddrModeB := ModeB{EA05y};
  90.    END;
  91.  
  92.    INC (i);
  93.    WITH Table68K[i] DO
  94.       Mnemonic := "ADDA";
  95.       Op := {15, 14, 12};
  96.       AddrModeA := ModeA{OpM68A};
  97.       AddrModeB := ModeB{EA05a};
  98.    END;
  99.  
  100.          
  101.    INC (i);
  102.    WITH Table68K[i] DO
  103.       Mnemonic := "ADDI";
  104.       Op := {10, 9};
  105.       AddrModeA := ModeA{};
  106.       AddrModeB := ModeB{Size67, EA05e, Exten};
  107.    END;
  108.    
  109.    INC (i);
  110.    WITH Table68K[i] DO
  111.       Mnemonic := "ADDQ";
  112.       Op := {14, 12};
  113.       AddrModeA := ModeA{Data911};
  114.       AddrModeB := ModeB{Size67, EA05d};
  115.    END;
  116.    
  117.    INC (i);
  118.    WITH Table68K[i] DO
  119.       Mnemonic := "ADDX";
  120.       Op := {15, 14, 12, 8};
  121.       AddrModeA := ModeA{RegMem3, Rx911, Ry02};
  122.       AddrModeB := ModeB{Size67};
  123.    END;
  124.    
  125.    INC (i);
  126.    WITH Table68K[i] DO
  127.       Mnemonic := "AND";
  128.       Op := {15, 14};
  129.       AddrModeA := ModeA{OpM68D};
  130.       AddrModeB := ModeB{EA05x};
  131.    END;
  132.    
  133.    INC (i);             
  134.    WITH Table68K[i] DO
  135.       Mnemonic := "ANDI";
  136.       Op := {9};
  137.       AddrModeA := ModeA{};
  138.       AddrModeB := ModeB{EA05e, Size67, Exten};
  139.    END;
  140.    
  141.    INC (i);
  142.    WITH Table68K[i] DO
  143.       Mnemonic := "ASL";
  144.       Op := {15, 14, 13, 8};
  145.       AddrModeA := ModeA{CntR911};
  146.       AddrModeB := ModeB{};
  147.    END;
  148.    
  149.    INC (i);
  150.    WITH Table68K[i] DO
  151.       Mnemonic := "ASR";
  152.       Op := {15, 14, 13};
  153.       AddrModeA := ModeA{CntR911};
  154.       AddrModeB := ModeB{};
  155.    END;
  156.    
  157.    INC (i);
  158.    WITH Table68K[i] DO
  159.       Mnemonic := "BCC";
  160.       Op := {14, 13, 10};
  161.       AddrModeA := ModeA{Brnch};
  162.       AddrModeB := ModeB{};
  163.    END;
  164.    
  165.    INC (i);
  166.    WITH Table68K[i] DO
  167.       Mnemonic := "BCHG";
  168.       Op := {6};
  169.       AddrModeA := ModeA{};
  170.       AddrModeB := ModeB{EA05e, Exten, Bit811};
  171.    END;
  172.    
  173.    INC (i);
  174.    WITH Table68K[i] DO
  175.       Mnemonic := "BCLR";
  176.       Op := {7};
  177.       AddrModeA := ModeA{};
  178.       AddrModeB := ModeB{EA05e, Exten, Bit811};
  179.    END;
  180.    
  181.    INC (i);
  182.    WITH Table68K[i] DO
  183.       Mnemonic := "BCS";
  184.       Op := {14, 13, 10, 8};
  185.       AddrModeA := ModeA{Brnch};
  186.       AddrModeB := ModeB{};
  187.    END;
  188.    
  189.    INC (i);
  190.    WITH Table68K[i] DO
  191.       Mnemonic := "BEQ";
  192.       Op := {14, 13, 10, 9, 8};
  193.       AddrModeA := ModeA{Brnch};
  194.       AddrModeB := ModeB{};
  195.    END;
  196.    
  197.    INC (i);
  198.    WITH Table68K[i] DO
  199.       Mnemonic := "BGE";
  200.       Op := {14, 13, 11, 10};
  201.       AddrModeA := ModeA{Brnch};
  202.       AddrModeB := ModeB{};
  203.    END;
  204.    
  205.    INC (i);
  206.    WITH Table68K[i] DO
  207.       Mnemonic := "BGT";
  208.       Op := {14, 13, 11, 10, 9};
  209.       AddrModeA := ModeA{Brnch};
  210.       AddrModeB := ModeB{};
  211.    END;
  212.    
  213.    INC (i);
  214.    WITH Table68K[i] DO
  215.       Mnemonic := "BHI";
  216.       Op := {14, 13, 9};
  217.       AddrModeA := ModeA{Brnch};
  218.       AddrModeB := ModeB{};
  219.    END;
  220.    
  221.    INC (i);
  222.    WITH Table68K[i] DO
  223.       Mnemonic := "BLE";
  224.       Op := {14, 13, 11, 10, 9, 8};
  225.       AddrModeA := ModeA{Brnch};
  226.       AddrModeB := ModeB{};
  227.    END;
  228.    
  229.    INC (i);
  230.    WITH Table68K[i] DO
  231.       Mnemonic := "BLS";
  232.       Op := {14, 13, 9, 8};
  233.       AddrModeA := ModeA{Brnch};
  234.       AddrModeB := ModeB{};
  235.    END;
  236.    
  237.    INC (i);
  238.    WITH Table68K[i] DO
  239.       Mnemonic := "BLT";
  240.       Op := {14, 13, 11, 10, 8};
  241.       AddrModeA := ModeA{Brnch};
  242.       AddrModeB := ModeB{};
  243.    END;
  244.    
  245.    INC (i);
  246.    WITH Table68K[i] DO
  247.       Mnemonic := "BMI";
  248.       Op := {14, 13, 11, 9, 8};
  249.       AddrModeA := ModeA{Brnch};
  250.       AddrModeB := ModeB{};
  251.    END;
  252.    
  253.    INC (i);
  254.    WITH Table68K[i] DO
  255.       Mnemonic := "BNE";
  256.       Op := {14, 13, 10, 9};
  257.       AddrModeA := ModeA{Brnch};
  258.       AddrModeB := ModeB{};
  259.    END;
  260.    
  261.    INC (i);
  262.    WITH Table68K[i] DO
  263.       Mnemonic := "BPL";
  264.       Op := {14, 13, 11, 9};
  265.       AddrModeA := ModeA{Brnch};
  266.       AddrModeB := ModeB{};
  267.    END;
  268.    
  269.    INC (i);
  270.    WITH Table68K[i] DO
  271.       Mnemonic := "BRA";
  272.       Op := {14, 13};
  273.       AddrModeA := ModeA{Brnch};
  274.       AddrModeB := ModeB{};
  275.    END;
  276.    
  277.    INC (i);
  278.    WITH Table68K[i] DO
  279.       Mnemonic := "BSET";
  280.       Op := {7, 6};
  281.       AddrModeA := ModeA{};
  282.       AddrModeB := ModeB{EA05e, Exten, Bit811};
  283.    END;
  284.    
  285.    INC (i);
  286.    WITH Table68K[i] DO
  287.       Mnemonic := "BSR";
  288.       Op := {14, 13, 8};
  289.       AddrModeA := ModeA{Brnch};
  290.       AddrModeB := ModeB{};
  291.    END;
  292. END One;
  293.  
  294. PROCEDURE Two;
  295. BEGIN   
  296.    INC (i);         
  297.    WITH Table68K[i] DO
  298.       Mnemonic := "BTST";
  299.       Op := {};
  300.       AddrModeA := ModeA{};
  301.       AddrModeB := ModeB{EA05c, Exten, Bit811};
  302.    END;
  303.    
  304.    INC (i);         
  305.    WITH Table68K[i] DO
  306.       Mnemonic := "BVC";
  307.       Op := {14, 13, 11};
  308.       AddrModeA := ModeA{Brnch};
  309.       AddrModeB := ModeB{};
  310.    END;
  311.    
  312.    INC (i);
  313.    WITH Table68K[i] DO
  314.       Mnemonic := "BVS";
  315.       Op := {14, 13, 11, 8};
  316.       AddrModeA := ModeA{Brnch};
  317.       AddrModeB := ModeB{};
  318.    END;
  319.    
  320.    INC (i);
  321.    WITH Table68K[i] DO
  322.       Mnemonic := "CHK";
  323.       Op := {14, 8, 7};
  324.       AddrModeA := ModeA{Rx911};
  325.       AddrModeB := ModeB{EA05b};
  326.    END;
  327.    
  328.    INC (i);         
  329.    WITH Table68K[i] DO
  330.       Mnemonic := "CLR";
  331.       Op := {14, 9};
  332.       AddrModeA := ModeA{};
  333.       AddrModeB := ModeB{Size67, EA05e};
  334.    END;
  335.    
  336.    INC (i);         
  337.    WITH Table68K[i] DO
  338.       Mnemonic := "CMP";
  339.       Op := {15, 13, 12};
  340.       AddrModeA := ModeA{OpM68C};
  341.       AddrModeB := ModeB{EA05a};
  342.    END;
  343.    
  344.    INC (i);         
  345.    WITH Table68K[i] DO
  346.       Mnemonic := "CMPA";
  347.       Op := {15, 13, 12};
  348.       AddrModeA := ModeA{OpM68A};
  349.       AddrModeB := ModeB{EA05a};
  350.    END;
  351.    
  352.    INC (i);         
  353.    WITH Table68K[i] DO
  354.       Mnemonic := "CMPI";
  355.       Op := {11, 10};
  356.       AddrModeA := ModeA{};
  357.       AddrModeB := ModeB{Size67, EA05e, Exten};
  358.    END;
  359.    
  360.    INC (i);         
  361.    WITH Table68K[i] DO
  362.       Mnemonic := "CMPM";
  363.       Op := {15, 13, 12, 8, 3};
  364.       AddrModeA := ModeA{Rx911, Ry02};
  365.       AddrModeB := ModeB{Size67};
  366.    END;
  367.    
  368.    INC (i);         
  369.    WITH Table68K[i] DO
  370.       Mnemonic := "DBCC";
  371.       Op := {14, 12, 10, 7, 6, 3};
  372.       AddrModeA := ModeA{DecBr};
  373.       AddrModeB := ModeB{};
  374.    END;
  375.    
  376.    INC (i);         
  377.    WITH Table68K[i] DO
  378.       Mnemonic := "DBCS";
  379.       Op := {14, 12, 10, 8, 7, 6, 3};
  380.       AddrModeA := ModeA{DecBr};
  381.       AddrModeB := ModeB{};
  382.    END;
  383.    
  384.    INC (i);         
  385.    WITH Table68K[i] DO
  386.       Mnemonic := "DBEQ";
  387.       Op := {14, 12, 10, 9, 8, 7, 6, 3};
  388.       AddrModeA := ModeA{DecBr};
  389.       AddrModeB := ModeB{};
  390.    END;
  391.    
  392.    INC (i);         
  393.    WITH Table68K[i] DO
  394.       Mnemonic := "DBF";
  395.       Op := {14, 12, 8, 7, 6, 3};
  396.       AddrModeA := ModeA{DecBr};
  397.       AddrModeB := ModeB{};
  398.    END;
  399.  
  400.    INC (i);         
  401.    WITH Table68K[i] DO
  402.       Mnemonic := "DBGE";
  403.       Op := {14, 12, 11, 10, 7, 6, 3};
  404.       AddrModeA := ModeA{DecBr};
  405.       AddrModeB := ModeB{};
  406.    END;
  407.    
  408.    INC (i);         
  409.    WITH Table68K[i] DO
  410.       Mnemonic := "DBGT";
  411.       Op := {14, 12, 11, 10, 9, 7, 6, 3};
  412.       AddrModeA := ModeA{DecBr};
  413.       AddrModeB := ModeB{};
  414.    END;
  415.    
  416.    INC (i);         
  417.    WITH Table68K[i] DO
  418.       Mnemonic := "DBHI";
  419.       Op := {14, 12, 9, 7, 6, 3};
  420.       AddrModeA := ModeA{DecBr};
  421.       AddrModeB := ModeB{};
  422.    END;
  423.    
  424.    INC (i);         
  425.    WITH Table68K[i] DO
  426.       Mnemonic := "DBLE";
  427.       Op := {14, 12, 11, 10, 9, 8, 7, 6, 3};
  428.       AddrModeA := ModeA{DecBr};
  429.       AddrModeB := ModeB{};
  430.    END;
  431.    
  432.    INC (i);         
  433.    WITH Table68K[i] DO
  434.       Mnemonic := "DBLS";
  435.       Op := {14, 12, 9, 8, 7, 6, 3};
  436.       AddrModeA := ModeA{DecBr};
  437.       AddrModeB := ModeB{};
  438.    END;
  439.    
  440.    INC (i);         
  441.    WITH Table68K[i] DO
  442.       Mnemonic := "DBLT";
  443.       Op := {14, 12, 11, 10, 8, 7, 6, 3};
  444.       AddrModeA := ModeA{DecBr};
  445.       AddrModeB := ModeB{};
  446.    END;
  447.    
  448.    INC (i);         
  449.    WITH Table68K[i] DO
  450.       Mnemonic := "DBMI";
  451.       Op := {14, 12, 11, 9, 8, 7, 6, 3};
  452.       AddrModeA := ModeA{DecBr};
  453.       AddrModeB := ModeB{};
  454.    END;
  455.    
  456.    INC (i);         
  457.    WITH Table68K[i] DO
  458.       Mnemonic := "DBNE";
  459.       Op := {14, 12, 10, 9, 7, 6, 3};
  460.       AddrModeA := ModeA{DecBr};
  461.       AddrModeB := ModeB{};
  462.    END;
  463.    
  464.    INC (i);         
  465.    WITH Table68K[i] DO
  466.       Mnemonic := "DBPL";
  467.       Op := {14, 12, 11, 9, 7, 6, 3};
  468.       AddrModeA := ModeA{DecBr};
  469.       AddrModeB := ModeB{};
  470.    END;
  471.    
  472.    INC (i);         
  473.    WITH Table68K[i] DO
  474.       Mnemonic := "DBRA";
  475.       Op := {14, 12, 8, 7, 6, 3};
  476.       AddrModeA := ModeA{DecBr};
  477.       AddrModeB := ModeB{};
  478.    END;
  479.  
  480.    INC (i);         
  481.    WITH Table68K[i] DO
  482.       Mnemonic := "DBT";
  483.       Op := {14, 12, 7, 6, 3};
  484.       AddrModeA := ModeA{DecBr};
  485.       AddrModeB := ModeB{};
  486.    END;
  487.    
  488.    INC (i);         
  489.    WITH Table68K[i] DO
  490.       Mnemonic := "DBVC";
  491.       Op := {14, 12, 11, 7, 6, 3};
  492.       AddrModeA := ModeA{DecBr};
  493.       AddrModeB := ModeB{};
  494.    END;
  495.    
  496.    INC (i);         
  497.    WITH Table68K[i] DO
  498.       Mnemonic := "DBVS";
  499.       Op := {14, 12, 11, 8, 7, 6, 3};
  500.       AddrModeA := ModeA{DecBr};
  501.       AddrModeB := ModeB{};
  502.    END;
  503.    
  504.    INC (i);         
  505.    WITH Table68K[i] DO
  506.       Mnemonic := "DIVS";
  507.       Op := {15, 8, 7, 6};
  508.       AddrModeA := ModeA{Rx911};
  509.       AddrModeB := ModeB{EA05b};
  510.    END;
  511.    
  512.    INC (i);         
  513.    WITH Table68K[i] DO
  514.       Mnemonic := "DIVU";
  515.       Op := {15, 7, 6};
  516.       AddrModeA := ModeA{Rx911};
  517.       AddrModeB := ModeB{EA05b};
  518.    END;
  519.  
  520.    INC (i);         
  521.    WITH Table68K[i] DO
  522.       Mnemonic := "EOR";
  523.       Op := {15, 13, 12};
  524.       AddrModeA := ModeA{OpM68X};
  525.       AddrModeB := ModeB{EA05e};
  526.    END;
  527.    
  528.    INC (i);         
  529.    WITH Table68K[i] DO
  530.       Mnemonic := "EORI";
  531.       Op := {11, 9};
  532.       AddrModeA := ModeA{};
  533.       AddrModeB := ModeB{Size67, EA05e, Exten};
  534.    END;
  535.    
  536.    INC (i);         
  537.    WITH Table68K[i] DO
  538.       Mnemonic := "EXG";
  539.       Op := {15, 14, 8};
  540.       AddrModeA := ModeA{OpM37};
  541.       AddrModeB := ModeB{};
  542.    END;
  543.    
  544.    INC (i);         
  545.    WITH Table68K[i] DO
  546.       Mnemonic := "EXT";
  547.       Op := {14, 11};
  548.       AddrModeA := ModeA{OpM68S};
  549.       AddrModeB := ModeB{};
  550.    END;
  551.    
  552.    INC (i);         
  553.    WITH Table68K[i] DO
  554.       Mnemonic := "ILLEGAL";
  555.       Op := {14, 11, 9, 7, 6, 5, 4, 3, 2};
  556.       AddrModeA := ModeA{};
  557.       AddrModeB := ModeB{};
  558.    END;
  559.  
  560.    INC (i);         
  561.    WITH Table68K[i] DO
  562.       Mnemonic := "JMP";
  563.       Op := {14, 11, 10, 9, 7, 6};
  564.       AddrModeA := ModeA{};
  565.       AddrModeB := ModeB{EA05f};
  566.    END;
  567.    
  568.    INC (i);         
  569.    WITH Table68K[i] DO
  570.       Mnemonic := "JSR";
  571.       Op := {14, 11, 10, 9, 7};
  572.       AddrModeA := ModeA{};
  573.       AddrModeB := ModeB{EA05f};
  574.    END;
  575. END Two;
  576.    
  577. PROCEDURE Three;
  578. BEGIN
  579.    INC (i);         
  580.    WITH Table68K[i] DO
  581.       Mnemonic := "LEA";
  582.       Op := {14, 8, 7, 6};
  583.       AddrModeA := ModeA{Rx911};
  584.       AddrModeB := ModeB{EA05f};
  585.    END;
  586.    
  587.    INC (i);         
  588.    WITH Table68K[i] DO
  589.       Mnemonic := "LINK";
  590.       Op := {14, 11, 10, 9, 6, 4};
  591.       AddrModeA := ModeA{Ry02};
  592.       AddrModeB := ModeB{Exten};
  593.    END;
  594.    
  595.    INC (i);         
  596.    WITH Table68K[i] DO
  597.       Mnemonic := "LSL";
  598.       Op := {15, 14, 13, 9, 8, 3};
  599.       AddrModeA := ModeA{CntR911};
  600.       AddrModeB := ModeB{};
  601.    END;
  602.    
  603.    INC (i);         
  604.    WITH Table68K[i] DO
  605.       Mnemonic := "LSR";
  606.       Op := {15, 14, 13, 9, 3};
  607.       AddrModeA := ModeA{CntR911};
  608.       AddrModeB := ModeB{};
  609.    END;
  610.    
  611.    INC (i);         
  612.    WITH Table68K[i] DO
  613.       Mnemonic := "MOVE"; 
  614.       Op := {};
  615.       AddrModeA := ModeA{};
  616.       AddrModeB := ModeB{Size1213A, EA611};
  617.    END;
  618.    
  619.    INC (i);         
  620.    WITH Table68K[i] DO
  621.       Mnemonic := "MOVEA";
  622.       Op := {6};
  623.       AddrModeA := ModeA{Rx911};
  624.       AddrModeB := ModeB{Size1213, EA05a};
  625.    END;
  626.    
  627.    INC (i);         
  628.    WITH Table68K[i] DO
  629.       Mnemonic := "MOVEM";
  630.       Op := {14, 11, 7};
  631.       AddrModeA := ModeA{};
  632.       AddrModeB := ModeB{Size6, EA05z, Exten};
  633.    END;
  634.    
  635.    INC (i);         
  636.    WITH Table68K[i] DO
  637.       Mnemonic := "MOVEP";
  638.       Op := {3};
  639.       AddrModeA := ModeA{OpM68R};
  640.       AddrModeB := ModeB{Exten};
  641.    END;
  642.    
  643.    INC (i);         
  644.    WITH Table68K[i] DO
  645.       Mnemonic := "MOVEQ";
  646.       Op := {14, 13, 12};
  647.       AddrModeA := ModeA{Data07};
  648.       AddrModeB := ModeB{};
  649.    END;
  650.    
  651.    INC (i);         
  652.    WITH Table68K[i] DO
  653.       Mnemonic := "MULS";
  654.       Op := {15, 14, 8, 7, 6};
  655.       AddrModeA := ModeA{Rx911};
  656.       AddrModeB := ModeB{EA05b};
  657.    END;
  658.    
  659.    INC (i);         
  660.    WITH Table68K[i] DO
  661.       Mnemonic := "MULU";
  662.       Op := {15, 14, 7, 6};
  663.       AddrModeA := ModeA{Rx911};
  664.       AddrModeB := ModeB{EA05b};
  665.    END;
  666.    
  667.    INC (i);         
  668.    WITH Table68K[i] DO
  669.       Mnemonic := "NBCD";
  670.       Op := {14, 11};
  671.       AddrModeA := ModeA{};
  672.       AddrModeB := ModeB{EA05e};
  673.    END;
  674.    
  675.    INC (i);            
  676.    WITH Table68K[i] DO
  677.       Mnemonic := "NEG";
  678.       Op := {14, 10};
  679.       AddrModeA := ModeA{};
  680.       AddrModeB := ModeB{Size67, EA05e};
  681.    END;
  682.    
  683.    INC (i);         
  684.    WITH Table68K[i] DO
  685.       Mnemonic := "NEGX";
  686.       Op := {14};
  687.       AddrModeA := ModeA{};
  688.       AddrModeB := ModeB{Size67, EA05e};
  689.    END;
  690.    
  691.    INC (i);         
  692.    WITH Table68K[i] DO
  693.       Mnemonic := "NOP";
  694.       Op := {14, 11, 10, 9, 6, 5, 4, 0};
  695.       AddrModeA := ModeA{};
  696.       AddrModeB := ModeB{};
  697.    END;
  698.    
  699.    INC (i);         
  700.    WITH Table68K[i] DO
  701.       Mnemonic := "NOT";
  702.       Op := {14, 10, 9};
  703.       AddrModeA := ModeA{};
  704.       AddrModeB := ModeB{Size67, EA05e};
  705.    END;
  706.    
  707.    INC (i);            
  708.    WITH Table68K[i] DO
  709.       Mnemonic := "OR";
  710.       Op := {15};
  711.       AddrModeA := ModeA{OpM68D};
  712.       AddrModeB := ModeB{EA05x};
  713.    END;
  714.    
  715.    INC (i);         
  716.    WITH Table68K[i] DO
  717.       Mnemonic := "ORI";
  718.       Op := {};
  719.       AddrModeA := ModeA{};
  720.       AddrModeB := ModeB{Size67, EA05e, Exten};
  721.    END;
  722.    
  723.    INC (i);         
  724.    WITH Table68K[i] DO
  725.       Mnemonic := "PEA";
  726.       Op := {14, 11, 6};
  727.       AddrModeA := ModeA{};
  728.       AddrModeB := ModeB{EA05f};
  729.    END;
  730.    
  731.    INC (i);         
  732.    WITH Table68K[i] DO
  733.       Mnemonic := "RESET";
  734.       Op := {14, 11, 10, 9, 6, 5, 4};
  735.       AddrModeA := ModeA{};
  736.       AddrModeB := ModeB{};
  737.    END;
  738.    
  739.    INC (i);         
  740.    WITH Table68K[i] DO
  741.       Mnemonic := "ROL";
  742.       Op := {15, 14, 13, 10, 9, 8, 4, 3};
  743.       AddrModeA := ModeA{CntR911};
  744.       AddrModeB := ModeB{};
  745.    END;
  746.    
  747.    INC (i);         
  748.    WITH Table68K[i] DO
  749.       Mnemonic := "ROR";
  750.       Op := {15, 14, 13, 10, 9, 4, 3};
  751.       AddrModeA := ModeA{CntR911};
  752.       AddrModeB := ModeB{};
  753.    END;
  754.    
  755.    INC (i);         
  756.    WITH Table68K[i] DO
  757.       Mnemonic := "ROXL";
  758.       Op := {15, 14, 13, 10, 8, 4};
  759.       AddrModeA := ModeA{CntR911};
  760.       AddrModeB := ModeB{};
  761.    END;
  762.    
  763.    INC (i);         
  764.    WITH Table68K[i] DO
  765.       Mnemonic := "ROXR";
  766.       Op := {15, 14, 13, 10, 4};
  767.       AddrModeA := ModeA{CntR911};
  768.       AddrModeB := ModeB{};
  769.    END;
  770.    
  771.    INC (i);         
  772.    WITH Table68K[i] DO
  773.       Mnemonic := "RTE";
  774.       Op := {14, 11, 10, 9, 6, 5, 4, 1, 0};
  775.       AddrModeA := ModeA{};
  776.       AddrModeB := ModeB{};
  777.    END;
  778.    
  779.    INC (i);         
  780.    WITH Table68K[i] DO
  781.       Mnemonic := "RTR";
  782.       Op := {14, 11, 10, 9, 6, 5, 4, 2, 1, 0};
  783.       AddrModeA := ModeA{};
  784.       AddrModeB := ModeB{};
  785.    END;
  786.    
  787.    INC (i);         
  788.    WITH Table68K[i] DO
  789.       Mnemonic := "RTS";
  790.       Op := {14, 11, 10, 9, 6, 5, 4, 2, 0};
  791.       AddrModeA := ModeA{};
  792.       AddrModeB := ModeB{};
  793.    END;
  794.    
  795.    INC (i);         
  796.    WITH Table68K[i] DO
  797.       Mnemonic := "SBCD";
  798.       Op := {15, 8};
  799.       AddrModeA := ModeA{Rx911, RegMem3, Ry02};
  800.       AddrModeB := ModeB{};
  801.    END;
  802.    
  803.    INC (i);         
  804.    WITH Table68K[i] DO
  805.       Mnemonic := "SCC";
  806.       Op := {14, 12, 10, 7, 6};
  807.       AddrModeA := ModeA{};
  808.       AddrModeB := ModeB{EA05e};
  809.    END;
  810.    
  811.    INC (i);         
  812.    WITH Table68K[i] DO
  813.       Mnemonic := "SCS";
  814.       Op := {14, 12, 10, 8, 7, 6};
  815.       AddrModeA := ModeA{};
  816.       AddrModeB := ModeB{EA05e};
  817.    END;
  818.    
  819.    INC (i);         
  820.    WITH Table68K[i] DO
  821.       Mnemonic := "SEQ";
  822.       Op := {14, 12, 10, 9, 8, 7, 6};
  823.       AddrModeA := ModeA{};
  824.       AddrModeB := ModeB{EA05e};
  825.    END;
  826.    
  827.    INC (i);         
  828.    WITH Table68K[i] DO
  829.       Mnemonic := "SF";
  830.       Op := {14, 12, 8, 7, 6};
  831.       AddrModeA := ModeA{};
  832.       AddrModeB := ModeB{EA05e};
  833.    END;
  834.    
  835.    INC (i);         
  836.    WITH Table68K[i] DO
  837.       Mnemonic := "SGE";
  838.       Op := {14, 12, 11, 10, 7, 6};
  839.       AddrModeA := ModeA{};
  840.       AddrModeB := ModeB{EA05e};
  841.    END;
  842.  
  843.    INC (i);         
  844.    WITH Table68K[i] DO
  845.       Mnemonic := "SGT";
  846.       Op := {14, 12, 11, 10, 9, 7, 6};
  847.       AddrModeA := ModeA{};
  848.       AddrModeB := ModeB{EA05e};
  849.    END;
  850. END Three;
  851.    
  852.  
  853. PROCEDURE Four;
  854. BEGIN
  855.    INC (i);         
  856.    WITH Table68K[i] DO
  857.       Mnemonic := "SHI";
  858.       Op := {14, 12, 9, 7, 6};
  859.       AddrModeA := ModeA{};
  860.       AddrModeB := ModeB{EA05e};
  861.    END;
  862.    
  863.    INC (i);         
  864.    WITH Table68K[i] DO
  865.       Mnemonic := "SLE";
  866.       Op := {14, 12, 11, 10, 9, 8, 7, 6};
  867.       AddrModeA := ModeA{};
  868.       AddrModeB := ModeB{EA05e};
  869.    END;
  870.    
  871.    INC (i);         
  872.    WITH Table68K[i] DO
  873.       Mnemonic := "SLS";
  874.       Op := {14, 12, 9, 8, 7, 6};
  875.       AddrModeA := ModeA{};
  876.       AddrModeB := ModeB{EA05e};
  877.    END;
  878.    
  879.    INC (i);         
  880.    WITH Table68K[i] DO
  881.       Mnemonic := "SLT";
  882.       Op := {14, 12, 11, 10, 8, 7, 6};
  883.       AddrModeA := ModeA{};
  884.       AddrModeB := ModeB{EA05e};
  885.    END;
  886.    
  887.    INC (i);         
  888.    WITH Table68K[i] DO
  889.       Mnemonic := "SMI";
  890.       Op := {14, 12, 11, 9, 8, 7, 6};
  891.       AddrModeA := ModeA{};
  892.       AddrModeB := ModeB{EA05e};
  893.    END;
  894.    
  895.    INC (i);         
  896.    WITH Table68K[i] DO
  897.       Mnemonic := "SNE";
  898.       Op := {14, 12, 10, 9, 7, 6};
  899.       AddrModeA := ModeA{};
  900.       AddrModeB := ModeB{EA05e};
  901.    END;
  902.    
  903.    INC (i);         
  904.    WITH Table68K[i] DO
  905.       Mnemonic := "SPL";
  906.       Op := {14, 12, 11, 9, 7, 6};
  907.       AddrModeA := ModeA{};
  908.       AddrModeB := ModeB{EA05e};
  909.    END;
  910.    
  911.    INC (i);         
  912.    WITH Table68K[i] DO
  913.       Mnemonic := "ST";
  914.       Op := {14, 12, 7, 6};
  915.       AddrModeA := ModeA{};
  916.       AddrModeB := ModeB{EA05e};
  917.    END;
  918.    
  919.    INC (i);         
  920.    WITH Table68K[i] DO
  921.       Mnemonic := "STOP";
  922.       Op := {14, 11, 10, 9, 6, 5, 4, 1};
  923.       AddrModeA := ModeA{};
  924.       AddrModeB := ModeB{Exten};
  925.    END;
  926.    
  927.    INC (i);         
  928.    WITH Table68K[i] DO
  929.       Mnemonic := "SUB";
  930.       Op := {15, 12};
  931.       AddrModeA := ModeA{OpM68D};
  932.       AddrModeB := ModeB{EA05y};
  933.    END;
  934.    
  935.    INC (i);         
  936.    WITH Table68K[i] DO
  937.       Mnemonic := "SUBA";
  938.       Op := {15, 12};
  939.       AddrModeA := ModeA{OpM68A};
  940.       AddrModeB := ModeB{EA05a};
  941.    END;
  942.    
  943.    INC (i);         
  944.    WITH Table68K[i] DO
  945.       Mnemonic := "SUBI";
  946.       Op := {10};
  947.       AddrModeA := ModeA{};
  948.       AddrModeB := ModeB{Size67, EA05e, Exten};
  949.    END;
  950.    
  951.    INC (i);         
  952.    WITH Table68K[i] DO
  953.       Mnemonic := "SUBQ";
  954.       Op := {14, 12, 8};
  955.       AddrModeA := ModeA{Data911};
  956.       AddrModeB := ModeB{Size67, EA05d};
  957.    END;
  958.    
  959.    INC (i);         
  960.    WITH Table68K[i] DO
  961.       Mnemonic := "SUBX";
  962.       Op := {15, 12, 8};
  963.       AddrModeA := ModeA{Rx911, RegMem3, Ry02};
  964.       AddrModeB := ModeB{Size67};
  965.    END;
  966.    
  967.    INC (i);         
  968.    WITH Table68K[i] DO
  969.       Mnemonic := "SVC";
  970.       Op := {14, 12, 11, 7, 6};
  971.       AddrModeA := ModeA{};
  972.       AddrModeB := ModeB{EA05e};
  973.    END;
  974.    
  975.    INC (i);         
  976.    WITH Table68K[i] DO
  977.       Mnemonic := "SVS";
  978.       Op := {14, 12, 11, 8, 7, 6};
  979.       AddrModeA := ModeA{};
  980.       AddrModeB := ModeB{EA05e};
  981.    END;
  982.    
  983.    INC (i);         
  984.    WITH Table68K[i] DO
  985.       Mnemonic := "SWAP";
  986.       Op := {14, 11, 6};
  987.       AddrModeA := ModeA{Ry02};
  988.       AddrModeB := ModeB{};
  989.    END;
  990.    
  991.    INC (i);         
  992.    WITH Table68K[i] DO
  993.       Mnemonic := "TAS";
  994.       Op := {14, 11, 9, 7, 6};
  995.       AddrModeA := ModeA{};
  996.       AddrModeB := ModeB{EA05e};
  997.    END;
  998.    
  999.    INC (i);         
  1000.    WITH Table68K[i] DO
  1001.       Mnemonic := "TRAP";
  1002.       Op := {14, 11, 10, 9, 6};
  1003.       AddrModeA := ModeA{Data03};
  1004.       AddrModeB := ModeB{};
  1005.    END;
  1006.    
  1007.    INC (i);         
  1008.    WITH Table68K[i] DO
  1009.       Mnemonic := "TRAPV";
  1010.       Op := {14, 11, 10, 9, 6, 5, 4, 2, 1};
  1011.       AddrModeA := ModeA{};
  1012.       AddrModeB := ModeB{};
  1013.    END;
  1014.    
  1015.    INC (i);
  1016.    WITH Table68K[i] DO
  1017.       Mnemonic := "TST";
  1018.       Op := {14, 11, 9};
  1019.       AddrModeA := ModeA{};
  1020.       AddrModeB := ModeB{Size67, EA05e};
  1021.    END;
  1022.    
  1023.    INC (i);         
  1024.    WITH Table68K[i] DO
  1025.       Mnemonic := "UNLK";
  1026.       Op := {14, 11, 10, 9, 6, 4, 3};
  1027.       AddrModeA := ModeA{Ry02};
  1028.       AddrModeB := ModeB{};
  1029.    END;
  1030. END Four;
  1031.  
  1032.  
  1033. BEGIN
  1034.    One;   (* first part of initialization *)
  1035.    Two;   (* rest of initialization -- Split due implementation restriction *)
  1036.    Three;
  1037.    Four;
  1038.  
  1039.    Delete ("OPCODE.DAT", f);   (* Just in case file already exists *)
  1040.    Lookup (f, "OPCODE.DAT", TRUE); 
  1041.    IF f.res # done THEN  
  1042.       WriteString ("Unable to create OpCode File.");
  1043.       WriteLn;
  1044.       HALT;
  1045.    END;
  1046.  
  1047.    FOR i := FIRST TO LAST DO
  1048.       WriteNBytes (f, ADR (Table68K[i]), TSIZE (TableRecord), d);
  1049.    END;
  1050.  
  1051.    Close (f);
  1052.    IF f.res # done THEN 
  1053.       WriteString ("Unable to close OpCode File.");
  1054.       WriteLn;
  1055.    END;
  1056. END InitOperationCodes.
  1057.  
  1058.